
`define USE_YOSYS
`ifdef USE_YOSYS
(* blackbox *)
module cycloneive_clkctrl(
    ena,
	inclk,
	clkselect,
	devclrn,
	devpor,
	outclk
    );
parameter clock_type = "global clock";
parameter ena_register_mode = "none";
	input wire ena;
	input wire[3:0] inclk;
	input wire[1:0] clkselect;
	input wire devclrn;
	input wire devpor;
	output wire outclk;
endmodule

module def_clk (
    clk_in,
    clk_out
);
    input wire clk_in;
    output wire clk_out;
    wire devclrn;
    wire devpor;
    wire devoe;
    wire outclk;
    // Location: CLKCTRL_G2
cycloneive_clkctrl inputclkctrl (
	.ena(1'b1),
	.inclk({1'b1,1'b1,1'b1,clk_in }),
	.clkselect(2'b00),
	.devclrn(devclrn),
	.devpor(devpor),
	.outclk(outclk ));
defparam inputclkctrl .clock_type = "global clock";
defparam inputclkctrl .ena_register_mode = "none";
    assign clk_out = outclk;
endmodule

`else
module def_clk (
    clk_in,
    clk_out
);
    input wire clk_in;
    output wire clk_out;
    assign clk_out = clk_in;
endmodule
`endif

(* blackbox *)
module alta_io (
  inout  padio,
  input  datain, oe,
  output combout
);
parameter coord_x = 0;
parameter coord_y = 0;
parameter coord_z = 0;
parameter PRG_DELAYB = 1'b0;
parameter RX_SEL = 1'b0;
parameter PDCNTL = 2'b11;
parameter NDCNTL = 2'b11;
parameter PRG_SLR = 1'b0;
parameter CFG_KEEP = 2'b00;
parameter PU = 4'b1000;
parameter LVDS_OUT = 1'b0;
endmodule

(* blackbox *)
module alta_clkenctrl (
  input ClkIn, ClkEn,
  output ClkOut
);
endmodule

/*定义rv32黑盒*/
(* blackbox *)
module alta_rv32 (
  input         sys_clk,
  output        mem_ahb_hready,
  input         mem_ahb_hreadyout,
  output [1:0]  mem_ahb_htrans,
  output [2:0]  mem_ahb_hsize,
  output [2:0]  mem_ahb_hburst,
  output        mem_ahb_hwrite,
  output [31:0] mem_ahb_haddr,
  output [31:0] mem_ahb_hwdata,
  input         mem_ahb_hresp,
  input  [31:0] mem_ahb_hrdata,
  input         slave_ahb_hsel,         //当FPGA需要访问AHB时,设置为1
  input         slave_ahb_hready,       //1'b1
  output        slave_ahb_hreadyout,    //AHB需要在hreadyout,才能进行操作,否则将错误,(调试接口失败?)
  input  [1:0]  slave_ahb_htrans,       //0:idle,1:busy,2:nonseq,3:seq
  input  [2:0]  slave_ahb_hsize,        //0:8bit,1:16bit,2:32bit,3:64,...
  input  [2:0]  slave_ahb_hburst,       //0:单笔数据,1:不定长批量传输,2:4数据环绕,3:4数据递增,4:8数据环绕,5:8数据递增....
  input         slave_ahb_hwrite,       //写操作
  input  [31:0] slave_ahb_haddr,        //地址
  input  [31:0] slave_ahb_hwdata,       //写数据
  output        slave_ahb_hresp,        //AHB反馈
  output [31:0] slave_ahb_hrdata,       //读数据
  input  [7:0]  gpio0_io_in,
  output [7:0]  gpio0_io_out_data,
  output [7:0]  gpio0_io_out_en,
  input  [7:0]  gpio1_io_in,
  output [7:0]  gpio1_io_out_data,
  output [7:0]  gpio1_io_out_en,
  output [1:0]  sys_ctrl_clkSource,
  output        sys_ctrl_hseEnable,
  output        sys_ctrl_hseBypass,
  output        sys_ctrl_pllEnable,
  input         sys_ctrl_pllReady,
  output        sys_ctrl_sleep,
  output        sys_ctrl_stop,
  output        sys_ctrl_standby,
  input  [7:0]  gpio2_io_in,
  output [7:0]  gpio2_io_out_data,
  output [7:0]  gpio2_io_out_en,
  input  [7:0]  gpio3_io_in,
  output [7:0]  gpio3_io_out_data,
  output [7:0]  gpio3_io_out_en,
  input  [7:0]  gpio4_io_in,
  output [7:0]  gpio4_io_out_data,
  output [7:0]  gpio4_io_out_en,
  input  [7:0]  gpio5_io_in,
  output [7:0]  gpio5_io_out_data,
  output [7:0]  gpio5_io_out_en,
  input  [7:0]  gpio6_io_in,
  output [7:0]  gpio6_io_out_data,
  output [7:0]  gpio6_io_out_en,
  input  [7:0]  gpio7_io_in,
  output [7:0]  gpio7_io_out_data,
  output [7:0]  gpio7_io_out_en,
  input  [7:0]  gpio8_io_in,
  output [7:0]  gpio8_io_out_data,
  output [7:0]  gpio8_io_out_en,
  input  [7:0]  gpio9_io_in,
  output [7:0]  gpio9_io_out_data,
  output [7:0]  gpio9_io_out_en,
  input         ext_resetn,
  output        resetn_out,
  output        dmactive,
  output        swj_JTAGNSW,
  output [3:0]  swj_JTAGSTATE,
  output [3:0]  swj_JTAGIR,
  input  [7:0]  ext_int,
  input  [3:0]  ext_dma_DMACBREQ,
  input  [3:0]  ext_dma_DMACLBREQ,
  input  [3:0]  ext_dma_DMACSREQ,
  input  [3:0]  ext_dma_DMACLSREQ,
  output [3:0]  ext_dma_DMACCLR,
  output [3:0]  ext_dma_DMACTC,
  input  [3:0]  local_int,
  input  [1:0]  test_mode,
  input         usb0_xcvr_clk,
  input         usb0_id
);

endmodule


(* blackbox *) (* keep *)
module alta_pllve
#(parameter N=3)
(
  input  clkin, clkfb,
  input  pfden, resetn,
  input  [2:0] phasecounterselect,
  input  phaseupdown, phasestep,
  input  scanclk, scanclkena, scandata, configupdate,
  output scandataout, scandone, phasedone,
  output clkout0, clkout1, clkout2, clkout3, clkout4,
  output clkfbout, lock
);
parameter coord_x         = 0;
parameter coord_y         = 0;
parameter coord_z         = 0;
parameter CLKIN_FREQ      = "20.0";
parameter CLKIN_HIGH      = 8'b0;
parameter CLKIN_LOW       = 8'b0;
parameter CLKIN_BYPASS    = 1'b0;
parameter CLKIN_TRIM      = 1'b0;
parameter CLKFB_HIGH      = 8'd36;
parameter CLKFB_LOW       = 8'd36;
parameter CLKFB_BYPASS    = 1'b0;
parameter CLKFB_TRIM      = 1'b0;
parameter CLKDIV0_EN      = 1'b0;
parameter CLKDIV1_EN      = 1'b0;
parameter CLKDIV2_EN      = 1'b0;
parameter CLKDIV3_EN      = 1'b0;
parameter CLKDIV4_EN      = 1'b0;
parameter CLKOUT0_HIGH    = 8'b0;
parameter CLKOUT0_LOW     = 8'b0;
parameter CLKOUT0_TRIM    = 1'b0;
parameter CLKOUT0_BYPASS  = 1'b0;
parameter CLKOUT1_HIGH    = 8'b0;
parameter CLKOUT1_LOW     = 8'b0;
parameter CLKOUT1_TRIM    = 1'b0;
parameter CLKOUT1_BYPASS  = 1'b0;
parameter CLKOUT2_HIGH    = 8'b0;
parameter CLKOUT2_LOW     = 8'b0;
parameter CLKOUT2_TRIM    = 1'b0;
parameter CLKOUT2_BYPASS  = 1'b0;
parameter CLKOUT3_HIGH    = 8'b0;
parameter CLKOUT3_LOW     = 8'b0;
parameter CLKOUT3_TRIM    = 1'b0;
parameter CLKOUT3_BYPASS  = 1'b0;
parameter CLKOUT4_HIGH    = 8'b0;
parameter CLKOUT4_LOW     = 8'b0;
parameter CLKOUT4_TRIM    = 1'b0;
parameter CLKOUT4_BYPASS  = 1'b0;
parameter CLKOUT0_DEL     = 8'b0;
parameter CLKOUT1_DEL     = 8'b0;
parameter CLKOUT2_DEL     = 8'b0;
parameter CLKOUT3_DEL     = 8'b0;
parameter CLKOUT4_DEL     = 8'b0;
parameter CLKOUT0_PHASE   = 3'b0;
parameter CLKOUT1_PHASE   = 3'b0;
parameter CLKOUT2_PHASE   = 3'b0;
parameter CLKOUT3_PHASE   = 3'b0;
parameter CLKOUT4_PHASE   = 3'b0;
parameter CLKFB_DEL       = 8'b0;
parameter CLKFB_PHASE     = 3'b0;
parameter FEEDBACK_MODE   = 3'b0;
parameter FBDELAY_VAL     = 3'b0;
parameter PLLOUTP_EN      = 1'b0;
parameter PLLOUTN_EN      = 1'b0;
parameter CLKOUT1_CASCADE = 1'b0;
parameter CLKOUT2_CASCADE = 1'b0;
parameter CLKOUT3_CASCADE = 1'b0;
parameter CLKOUT4_CASCADE = 1'b0;
parameter VCO_POST_DIV    = 1'b0;
parameter REG_CTRL        = 2'b0;
parameter IVCO            = 3'b100;
parameter CP              = 3'b010;
parameter RREF            = 2'b01;
parameter RLPF            = 2'b01;
parameter RVI             = 2'b01;
parameter PLL_EN_FLAG     = 1'b0;
endmodule

(* blackbox *) (* keep *)
module alta_gclksw (
  input  resetn, ena, clkin0, clkin1, clkin2, clkin3,
  input  [1:0] select,
  output clkout
);
parameter coord_x = 0;
parameter coord_y = 0;
parameter coord_z = 0;
parameter ENA_REG_MODE = 1'b0;
endmodule

(* blackbox *) (* keep *)
module alta_rio (
  input  datain, oe, outclk, outclkena, inclk, inclkena, areset, sreset,
  output combout, regout,
  inout  padio
);
endmodule

(* blackbox *)
module alta_gclkgen (
  input  clkin, ena, mode,
  output clkout
);
endmodule

(* blackbox *)
module alta_io_gclk (
  input inclk,
  output outclk
);
endmodule

module alta_wram (
  input WEna, WClk,
  input [7:0] Din,
  input [3:0] WAddr,
  input [3:0] RAddr,
  output reg [7:0] Dout
) /* synthesis syn_black_box */;
endmodule

(* blackbox *)
module alta_bram9k (
  input  [17:0]  DataInA,  DataInB,
  input  [12:0] AddressA, AddressB,
  input  [ 1:0]  ByteEnA,  ByteEnB,
  output [17:0] DataOutA,  DataOutB,
  input  Clk0, ClkEn0, AsyncReset0,
  input  Clk1, ClkEn1, AsyncReset1,
  input  AddressStallA, WeA, ReA,
  input  AddressStallB, WeB, ReB
) /* synthesis syn_black_box */;
parameter coord_x = 0;
parameter coord_y = 0;
parameter coord_z = 0;

parameter CLKMODE         = 2'b0; // 00: independent mode, 01: input/output mode, 1x: read/write mode
parameter PORTA_CLKIN_EN  = 1'b0;
parameter PORTA_CLKOUT_EN = 1'b0;
parameter PORTB_CLKIN_EN  = 1'b0;
parameter PORTB_CLKOUT_EN = 1'b0;
parameter PORTA_RSTIN_EN  = 1'b0;
parameter PORTA_RSTOUT_EN = 1'b0;
parameter PORTB_RSTIN_EN  = 1'b0;
parameter PORTB_RSTOUT_EN = 1'b0;
parameter PORTA_OUTREG    = 1'b0;
parameter PORTB_OUTREG    = 1'b0;
parameter PORTA_WIDTH     = 5'b0;
parameter PORTB_WIDTH     = 5'b0;
parameter PACKEDMODE      = 1'b0;
parameter INIT_VAL        = 9216'b0;

parameter PORTA_WRITETHRU = 1'b0;
parameter PORTB_WRITETHRU = 1'b0;

parameter DLYTIME  = 2'b00;
parameter RSEN_DLY = 2'b00;
endmodule

// module $_DLATCH_N_ (E, D, Q);
//   wire [1023:0] _TECHMAP_DO_ = "simplemap; opt";
//   input E, D;
//   output Q = !E ? D : Q;
// endmodule

